home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 8 / 05 / term-4.0-source.lha / ScreenPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-29  |  43.0 KB  |  1,661 lines

  1. /*
  2. **    ScreenPanel.c
  3. **
  4. **    Editing panel for screen configuration
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_SCREENMODE=1,GAD_USE_PUBSCREEN,GAD_PUBSCREENNAME,GAD_FONT,
  13.         GAD_COLOURMODE,GAD_SCREENTITLE,GAD_MAKESCREENPUBLIC,GAD_SHANGHAI,
  14.         GAD_BLINKING,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_RESET,
  15.         GAD_STDPENS,GAD_EDITPENS,GAD_WINDOW_BORDER,GAD_SPLIT_STATUS,
  16.         GAD_STATUS_LINE,
  17.  
  18.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  19.  
  20. struct ModeNode
  21. {
  22.     struct Node    VanillaNode;
  23.     ULONG        DisplayID;
  24. };
  25.  
  26.     /* ModeFilter(register __a1 ULONG ID):
  27.      *
  28.      *    Screen display mode filter, rejects all
  29.      *    modes unapproriate for screen display.
  30.      */
  31.  
  32. STATIC ULONG __saveds __asm
  33. ModeFilter(register __a1 ULONG ID)
  34. {
  35.     struct DimensionInfo DimensionInfo;
  36.  
  37.     if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,ID))
  38.     {
  39.         if(DimensionInfo . TxtOScan . MaxX - DimensionInfo . TxtOScan . MinX + 1 >= 640)
  40.             return(TRUE);
  41.     }
  42.  
  43.     return(FALSE);
  44. }
  45.  
  46. STATIC BYTE __regargs
  47. IsWrongMode(struct Configuration *LocalConfig,WORD OriginalMode)
  48. {
  49.     if(Config -> ScreenConfig -> ColourMode != OriginalMode || LocalConfig -> ScreenConfig -> UseWorkbench || Config -> ScreenConfig -> UseWorkbench || !Screen)
  50.         return(TRUE);
  51.     else
  52.     {
  53.         switch(LocalConfig -> ScreenConfig -> ColourMode)
  54.         {
  55.             case COLOUR_AMIGA:
  56.  
  57.                 if(Window -> WScreen -> RastPort . BitMap -> Depth < 2)
  58.                     return(TRUE);
  59.  
  60.                 break;
  61.  
  62.             case COLOUR_EIGHT:
  63.  
  64.                 if(Window -> WScreen -> RastPort . BitMap -> Depth < 3)
  65.                     return(TRUE);
  66.  
  67.                 break;
  68.  
  69.             case COLOUR_SIXTEEN:
  70.  
  71.                 if(Window -> WScreen -> RastPort . BitMap -> Depth < 4)
  72.                     return(TRUE);
  73.  
  74.                 break;
  75.  
  76.             case COLOUR_MONO:
  77.  
  78.                 if(Window -> WScreen -> RastPort . BitMap -> Depth > 1)
  79.                     return(TRUE);
  80.  
  81.                 break;
  82.         }
  83.  
  84.         return(FALSE);
  85.     }
  86. }
  87.  
  88. STATIC struct List * __regargs
  89. BuildModeList(LONG *Index,ULONG DisplayMode)
  90. {
  91.     struct List    *List;
  92.     LONG         Count = 0;
  93.  
  94.     *Index = 0;
  95.  
  96.     if(List = (struct List *)AllocVecPooled(sizeof(struct List),MEMF_ANY))
  97.     {
  98.         struct DisplayInfo    DisplayInfo;
  99.         ULONG            SomeMode = INVALID_ID;
  100.  
  101.         NewList(List);
  102.  
  103.         while((SomeMode = NextDisplayInfo(SomeMode)) != INVALID_ID)
  104.         {
  105.             if(GetDisplayInfoData(NULL,(APTR)&DisplayInfo,sizeof(struct DisplayInfo),DTAG_DISP,SomeMode))
  106.             {
  107.                 if((DisplayInfo . PropertyFlags & DIPF_IS_WB) && ModeFilter(SomeMode) && !DisplayInfo . NotAvailable)
  108.                 {
  109.                     STRPTR Name;
  110.  
  111.                     if(Name = GetModeName(SomeMode))
  112.                     {
  113.                         struct ModeNode    *ModeNode;
  114.  
  115.                         if(ModeNode = (struct ModeNode *)AllocVecPooled(sizeof(struct ModeNode) + strlen(Name) + 1,MEMF_ANY))
  116.                         {
  117.                             ModeNode -> VanillaNode . ln_Name = (STRPTR)(ModeNode + 1);
  118.  
  119.                             strcpy(ModeNode -> VanillaNode . ln_Name,Name);
  120.  
  121.                             ModeNode -> DisplayID = SomeMode;
  122.  
  123.                             if(SomeMode == DisplayMode)
  124.                                 *Index = Count;
  125.  
  126.                             AddTail(List,ModeNode);
  127.  
  128.                             Count++;
  129.                         }
  130.                     }
  131.                 }
  132.             }
  133.         }
  134.     }
  135.  
  136.     if(Count)
  137.         return(List);
  138.     else
  139.     {
  140.         DeleteList(List);
  141.  
  142.         return(NULL);
  143.     }
  144. }
  145.  
  146. STATIC BYTE  __regargs
  147. SelectDisplayMode(struct Window *Window,ULONG *CurrentMode,struct Configuration *Config)
  148. {
  149.     BYTE Success = FALSE;
  150.  
  151.     if(AslBase -> lib_Version < 38)
  152.     {
  153.         struct List    *ModeList;
  154.         LONG         Index;
  155.  
  156.         if(ModeList = BuildModeList(&Index,*CurrentMode))
  157.         {
  158.             struct LayoutHandle *Handle;
  159.  
  160.             if(Handle = LT_CreateHandleTags(Window -> WScreen,
  161.                 LH_LocaleHook,    &LocaleHook,
  162.             TAG_DONE))
  163.             {
  164.                 struct Window *LocalWindow;
  165.  
  166.                 LT_New(Handle,
  167.                     LA_Type,    VERTICAL_KIND,
  168.                 TAG_DONE);
  169.                 {
  170.                     LT_New(Handle,
  171.                         LA_Type,    VERTICAL_KIND,
  172.                     TAG_DONE);
  173.                     {
  174.                         LT_New(Handle,
  175.                             LA_Type,    LISTVIEW_KIND,
  176.                             LA_LabelID,    MSG_V36_0160,
  177.                             GTLV_Labels,    ModeList,
  178.                             LA_LONG,    &Index,
  179.                             LALV_CursorKey,    TRUE,
  180.                             LALV_Link,    NIL_LINK,
  181.                             LALV_MaxGrowY,    20,
  182.                             LA_Lines,    10,
  183.                             LA_Chars,    40,
  184.                             LA_CursorKey,    TRUE,
  185.                         TAG_DONE);
  186.  
  187.                         LT_EndGroup(Handle);
  188.                     }
  189.  
  190.                     LT_New(Handle,
  191.                         LA_Type,VERTICAL_KIND,
  192.                     TAG_DONE);
  193.                     {
  194.                         LT_New(Handle,
  195.                             LA_Type,    XBAR_KIND,
  196.                             LAXB_FullSize,    TRUE,
  197.                         TAG_DONE);
  198.  
  199.                         LT_EndGroup(Handle);
  200.                     }
  201.  
  202.                     LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  203.                         LAGR_SameSize,    TRUE,
  204.                         LAGR_Spread,    TRUE,
  205.                     TAG_DONE);
  206.                     {
  207.                         LT_New(Handle,
  208.                             LA_Type,    BUTTON_KIND,
  209.                             LA_LabelID,    MSG_GLOBAL_USE_GAD,
  210.                             LA_ID,        GAD_USE,
  211.                             LABT_ReturnKey,    TRUE,
  212.                             LABT_ExtraFat,    TRUE,
  213.                         TAG_DONE);
  214.  
  215.                         LT_New(Handle,
  216.                             LA_Type,    BUTTON_KIND,
  217.                             LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  218.                             LA_ID,        GAD_CANCEL,
  219.                             LABT_EscKey,    TRUE,
  220.                             LABT_ExtraFat,    TRUE,
  221.                         TAG_DONE);
  222.  
  223.                         LT_EndGroup(Handle);
  224.                     }
  225.  
  226.                     LT_EndGroup(Handle);
  227.                 }
  228.  
  229.                 if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_V36_0161),NULL,0,0,IDCMP_CLOSEWINDOW,NULL,
  230.                     LAWN_HelpHook,        &GuideHook,
  231.                     WA_DepthGadget,        TRUE,
  232.                     WA_CloseGadget,        TRUE,
  233.                     WA_DragBar,        TRUE,
  234.                     WA_RMBTrap,        TRUE,
  235.                     WA_Activate,        TRUE,
  236.                 TAG_DONE))
  237.                 {
  238.                     struct IntuiMessage    *Message;
  239.                     BOOL             Done = FALSE;
  240.                     ULONG             MsgClass,
  241.                                  MsgQualifier;
  242.                     UWORD             MsgCode;
  243.                     struct Gadget        *MsgGadget;
  244.                     LONG             i;
  245.                     struct ModeNode        *ModeNode;
  246.  
  247.                     do
  248.                     {
  249.                         WaitPort(LocalWindow -> UserPort);
  250.  
  251.                         while(Message = (struct IntuiMessage *)GT_GetIMsg(LocalWindow -> UserPort))
  252.                         {
  253.                             MsgClass    = Message -> Class;
  254.                             MsgCode        = Message -> Code;
  255.                             MsgQualifier    = Message -> Qualifier;
  256.                             MsgGadget    = (struct Gadget *)Message -> IAddress;
  257.  
  258.                             GT_ReplyIMsg(Message);
  259.  
  260.                             LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  261.  
  262.                             if(MsgClass == IDCMP_CLOSEWINDOW)
  263.                                 Done = TRUE;
  264.  
  265.                             if(MsgClass == IDCMP_GADGETUP)
  266.                             {
  267.                                 switch(MsgGadget -> GadgetID)
  268.                                 {
  269.                                     case GAD_USE:
  270.  
  271.                                         for(ModeNode = (struct ModeNode *)ModeList -> lh_Head, i = 0; ModeNode -> VanillaNode . ln_Succ ; ModeNode = (struct ModeNode *)ModeNode -> VanillaNode . ln_Succ, i++)
  272.                                         {
  273.                                             if(Index == i)
  274.                                             {
  275.                                                 *CurrentMode = ModeNode -> DisplayID;
  276.  
  277.                                                 break;
  278.                                             }
  279.                                         }
  280.  
  281.                                         Success = Done = TRUE;
  282.                                         break;
  283.  
  284.                                     case GAD_CANCEL:
  285.  
  286.                                         Done = TRUE;
  287.                                         break;
  288.                                 }
  289.                             }
  290.  
  291.                             if(MsgClass == IDCMP_IDCMPUPDATE)
  292.                             {
  293.                                 for(ModeNode = (struct ModeNode *)ModeList -> lh_Head, i = 0; ModeNode -> VanillaNode . ln_Succ ; ModeNode = (struct ModeNode *)ModeNode -> VanillaNode . ln_Succ, i++)
  294.                                 {
  295.                                     if(Index == i)
  296.                                     {
  297.                                         *CurrentMode = ModeNode -> DisplayID;
  298.  
  299.                                         Success = Done = TRUE;
  300.  
  301.                                         LT_PressButton(Handle,GAD_USE);
  302.  
  303.                                         break;
  304.                                     }
  305.                                 }
  306.                             }
  307.                         }
  308.                     }
  309.                     while(!Done);
  310.                 }
  311.  
  312.                 LT_DeleteHandle(Handle);
  313.             }
  314.  
  315.             DeleteList(ModeList);
  316.         }
  317.     }
  318.     else
  319.     {
  320.         struct ScreenModeRequester    *Request;
  321.         struct Hook             FilterHook;
  322.         LONG                 Left    = 0,
  323.                          Top    = 0,
  324.                          Width    = 0,
  325.                          Height    = 0,
  326.                          DisplayWidth,
  327.                          DisplayHeight,
  328.                          Depth,
  329.                          MinDepth;
  330.         struct Rectangle         DisplayClip;
  331.  
  332.         Depth = Config -> ScreenConfig -> Depth;
  333.  
  334.         GetWindowInfo(WINDOW_SCREEN,&Left,&Top,&Width,&Height,Window -> Width / 2,Window -> Height / 2);
  335.  
  336.         FilterHook . h_Entry    = (HOOKFUNC)ModeFilter;
  337.         FilterHook . h_SubEntry    = NULL;
  338.         FilterHook . h_Data    = NULL;
  339.  
  340.         switch(Config -> ScreenConfig -> ColourMode)
  341.         {
  342.             case COLOUR_AMIGA:
  343.  
  344.                 MinDepth = 2;
  345.                 break;
  346.  
  347.             case COLOUR_EIGHT:
  348.  
  349.                 MinDepth = 3;
  350.                 break;
  351.  
  352.             case COLOUR_SIXTEEN:
  353.  
  354.                 MinDepth = 4;
  355.                 break;
  356.  
  357.             case COLOUR_MONO:
  358.  
  359.                 MinDepth = 1;
  360.                 break;
  361.         }
  362.  
  363.         if(Depth < MinDepth)
  364.             Depth = MinDepth;
  365.  
  366.         if((!Config -> ScreenConfig -> DisplayWidth || !Config -> ScreenConfig -> DisplayHeight) && QueryOverscan(Config -> ScreenConfig -> DisplayMode,&DisplayClip,Config -> ScreenConfig -> OverscanType))
  367.         {
  368.             DisplayWidth    = DisplayClip . MaxX - DisplayClip . MinX + 1;
  369.             DisplayHeight    = DisplayClip . MaxY - DisplayClip . MinY + 1;
  370.         }
  371.         else
  372.         {
  373.             DisplayWidth    = Config -> ScreenConfig -> DisplayWidth;
  374.             DisplayHeight    = Config -> ScreenConfig -> DisplayHeight;
  375.         }
  376.  
  377.         if(Request = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
  378.             ASLSM_Window,            Window,
  379.             ASLSM_InitialDisplayID,        *CurrentMode,
  380.             ASLSM_FilterFunc,        &FilterHook,
  381.             ASLSM_PrivateIDCMP,        TRUE,
  382.             ASLSM_InitialDisplayDepth,    Depth,
  383.             ASLSM_MinDepth,            MinDepth,
  384.             ASLSM_MaxDepth,            8,
  385.             ASLSM_DoDepth,            TRUE,
  386.             ASLSM_MinWidth,            640,
  387.             ASLSM_MinHeight,        200,
  388.             ASLSM_DoWidth,            TRUE,
  389.             ASLSM_DoHeight,            TRUE,
  390.             ASLSM_DoOverscanType,        TRUE,
  391.             ASLSM_InitialOverscanType,    Config -> ScreenConfig -> OverscanType,
  392.  
  393.             DisplayWidth  ? ASLSM_InitialDisplayWidth  : TAG_IGNORE, DisplayWidth,
  394.             DisplayHeight ? ASLSM_InitialDisplayHeight : TAG_IGNORE, DisplayHeight,
  395.  
  396.             ASL_LeftEdge,            Left,
  397.             ASL_TopEdge,            Top,
  398.             ASL_Width,            Width,
  399.             ASL_Height,            Height,
  400.         TAG_DONE))
  401.         {
  402.             if(AslRequestTags(Request,TAG_DONE))
  403.             {
  404.                 PutWindowInfo(WINDOW_SCREEN,Request -> sm_LeftEdge,Request -> sm_TopEdge,Request -> sm_Width,Request -> sm_Height);
  405.  
  406.                 *CurrentMode = Request -> sm_DisplayID;
  407.  
  408.                 if(Request -> sm_DisplayDepth == MinDepth)
  409.                     Depth = 0;
  410.                 else
  411.                     Depth = Request -> sm_DisplayDepth;
  412.  
  413.                 Config -> ScreenConfig -> Depth        = Depth;
  414.                 Config -> ScreenConfig -> OverscanType    = Request -> sm_OverscanType;
  415.                 Config -> ScreenConfig -> DisplayWidth    = Request -> sm_DisplayWidth;
  416.                 Config -> ScreenConfig -> DisplayHeight    = Request -> sm_DisplayHeight;
  417.  
  418.                 Success = TRUE;
  419.             }
  420.  
  421.             FreeAslRequest(Request);
  422.         }
  423.     }
  424.  
  425.     return(Success);
  426. }
  427.  
  428. STATIC BOOLEAN __regargs
  429. PenPanel(struct Window *Window,UWORD *Array,UWORD *DefaultArray,WORD Depth)
  430. {
  431.     struct LayoutHandle    *Handle;
  432.     UWORD             PrivateArray[16];
  433.     BOOLEAN             Result = FALSE;
  434.  
  435.     CopyMem(Array,PrivateArray,sizeof(PrivateArray));
  436.  
  437.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  438.         LH_LocaleHook,    &LocaleHook,
  439.         LH_ExactClone,    TRUE,
  440.     TAG_DONE))
  441.     {
  442.         struct Window *Window;
  443.  
  444.         LT_New(Handle,
  445.             LA_Type,    VERTICAL_KIND,
  446.         TAG_DONE);
  447.         {
  448.             LT_New(Handle,
  449.                 LA_Type,    VERTICAL_KIND,
  450.                 LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  451.             TAG_DONE);
  452.             {
  453.                 LT_New(Handle,
  454.                     LA_Type,    VERTICAL_KIND,
  455.                 TAG_DONE);
  456.                 {
  457.                     LT_New(Handle,
  458.                         LA_Type,        PALETTE_KIND,
  459.                         LA_LabelID,        MSG_PENPANEL_BACKGROUND_TXT,
  460.                         GTPA_Depth,        Depth,
  461.                         LAPA_SmallPalette,    TRUE,
  462.                         LA_UWORD,        &PrivateArray[BACKGROUNDPEN],
  463.                         LA_Chars,        15,
  464.                         LA_ID,            100 + BACKGROUNDPEN,
  465.                     TAG_DONE);
  466.  
  467.                     LT_New(Handle,
  468.                         LA_Type,        PALETTE_KIND,
  469.                         LA_LabelID,        MSG_PENPANEL_TEXT_TXT,
  470.                         GTPA_Depth,        Depth,
  471.                         LAPA_SmallPalette,    TRUE,
  472.                         LA_UWORD,        &PrivateArray[TEXTPEN],
  473.                         LA_ID,            100 + TEXTPEN,
  474.                     TAG_DONE);
  475.  
  476.                     LT_New(Handle,
  477.                         LA_Type,        PALETTE_KIND,
  478.                         LA_LabelID,        MSG_PENPANEL_IMPORTANT_TEXT_TXT,
  479.                         GTPA_Depth,        Depth,
  480.                         LAPA_SmallPalette,    TRUE,
  481.                         LA_UWORD,        &PrivateArray[HIGHLIGHTTEXTPEN],
  482.                         LA_ID,            100 + HIGHLIGHTTEXTPEN,
  483.                     TAG_DONE);
  484.  
  485.                     LT_New(Handle,
  486.                         LA_Type,        PALETTE_KIND,
  487.                         LA_LabelID,        MSG_PENPANEL_BRIGHT_EDGES_TXT,
  488.                         GTPA_Depth,        Depth,
  489.                         LAPA_SmallPalette,    TRUE,
  490.                         LA_UWORD,        &PrivateArray[SHINEPEN],
  491.                         LA_ID,            100 + SHINEPEN,
  492.                     TAG_DONE);
  493.  
  494.                     LT_New(Handle,
  495.                         LA_Type,        PALETTE_KIND,
  496.                         LA_LabelID,        MSG_PENPANEL_DARK_EDGES_TXT,
  497.                         GTPA_Depth,        Depth,
  498.                         LAPA_SmallPalette,    TRUE,
  499.                         LA_UWORD,        &PrivateArray[SHADOWPEN],
  500.                         LA_ID,            100 + SHADOWPEN,
  501.                     TAG_DONE);
  502.  
  503.                     LT_New(Handle,
  504.                         LA_Type,        PALETTE_KIND,
  505.                         LA_LabelID,        MSG_PENPANEL_FILLPEN_TXT,
  506.                         GTPA_Depth,        Depth,
  507.                         LAPA_SmallPalette,    TRUE,
  508.                         LA_UWORD,        &PrivateArray[FILLPEN],
  509.                         LA_ID,            100 + FILLPEN,
  510.                     TAG_DONE);
  511.  
  512.                     LT_New(Handle,
  513.                         LA_Type,        PALETTE_KIND,
  514.                         LA_LabelID,        MSG_PENPANEL_FILLTEXTPEN_TXT,
  515.                         GTPA_Depth,        Depth,
  516.                         LAPA_SmallPalette,    TRUE,
  517.                         LA_UWORD,        &PrivateArray[FILLTEXTPEN],
  518.                         LA_ID,            100 + FILLTEXTPEN,
  519.                     TAG_DONE);
  520.  
  521.                     LT_New(Handle,
  522.                         LA_Type,        PALETTE_KIND,
  523.                         LA_LabelID,        MSG_PENPANEL_BARFILLPEN_TXT,
  524.                         GTPA_Depth,        Depth,
  525.                         LAPA_SmallPalette,    TRUE,
  526.                         LA_UWORD,        &PrivateArray[BARBLOCKPEN],
  527.                         LA_ID,            100 + BARBLOCKPEN,
  528.                     TAG_DONE);
  529.  
  530.                     LT_New(Handle,
  531.                         LA_Type,        PALETTE_KIND,
  532.                         LA_LabelID,        MSG_PENPANEL_BARTEXTPEN_TXT,
  533.                         GTPA_Depth,        Depth,
  534.                         LAPA_SmallPalette,    TRUE,
  535.                         LA_UWORD,        &PrivateArray[BARDETAILPEN],
  536.                         LA_ID,            100 + BARDETAILPEN,
  537.                     TAG_DONE);
  538.  
  539.                     LT_EndGroup(Handle);
  540.                 }
  541.  
  542.                 LT_New(Handle,
  543.                     LA_Type,XBAR_KIND,
  544.                 TAG_DONE);
  545.  
  546.                 LT_New(Handle,
  547.                     LA_Type,    VERTICAL_KIND,
  548.                 TAG_DONE);
  549.                 {
  550.                     LT_New(Handle,
  551.                         LA_Type,    BUTTON_KIND,
  552.                         LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  553.                         LA_ID,        GAD_DEFAULT,
  554.                         LABT_ExtraFat,    TRUE,
  555.                     TAG_DONE);
  556.  
  557.                     LT_EndGroup(Handle);
  558.                 }
  559.  
  560.                 LT_EndGroup(Handle);
  561.             }
  562.  
  563.             LT_New(Handle,
  564.                 LA_Type,VERTICAL_KIND,
  565.             TAG_DONE);
  566.             {
  567.                 LT_New(Handle,
  568.                     LA_Type,    XBAR_KIND,
  569.                     LAXB_FullSize,    TRUE,
  570.                 TAG_DONE);
  571.  
  572.                 LT_EndGroup(Handle);
  573.             }
  574.  
  575.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  576.                 LAGR_SameSize,    TRUE,
  577.                 LAGR_Spread,    TRUE,
  578.             TAG_DONE);
  579.             {
  580.                 LT_New(Handle,
  581.                     LA_Type,    BUTTON_KIND,
  582.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  583.                     LA_ID,        GAD_USE,
  584.                     LABT_ReturnKey,    TRUE,
  585.                     LABT_ExtraFat,    TRUE,
  586.                 TAG_DONE);
  587.  
  588.                 LT_New(Handle,
  589.                     LA_Type,    BUTTON_KIND,
  590.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  591.                     LA_ID,        GAD_CANCEL,
  592.                     LABT_EscKey,    TRUE,
  593.                     LABT_ExtraFat,    TRUE,
  594.                 TAG_DONE);
  595.  
  596.                 LT_EndGroup(Handle);
  597.             }
  598.  
  599.             LT_EndGroup(Handle);
  600.         }
  601.  
  602.         if(Window = LT_Layout(Handle,LocaleString(MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  603.             LAWN_HelpHook,        &GuideHook,
  604.             WA_DepthGadget,        TRUE,
  605.             WA_CloseGadget,        TRUE,
  606.             WA_DragBar,        TRUE,
  607.             WA_RMBTrap,        TRUE,
  608.             WA_Activate,        TRUE,
  609.         TAG_DONE))
  610.         {
  611.             struct IntuiMessage    *Message;
  612.             BOOLEAN             Done = FALSE;
  613.             ULONG             MsgClass,
  614.                          MsgQualifier;
  615.             UWORD             MsgCode;
  616.             struct Gadget        *MsgGadget;
  617.             WORD             i;
  618.  
  619.             PushWindow(Window);
  620.  
  621.             LT_ShowWindow(Handle,TRUE);
  622.  
  623.             GuideContext(CONTEXT_SCREEN);
  624.  
  625.             do
  626.             {
  627.                 if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  628.                     break;
  629.  
  630.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  631.                 {
  632.                     MsgClass    = Message -> Class;
  633.                     MsgQualifier    = Message -> Qualifier;
  634.                     MsgCode        = Message -> Code;
  635.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  636.  
  637.                     GT_ReplyIMsg(Message);
  638.  
  639.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  640.  
  641.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  642.                         Done = TRUE;
  643.  
  644.                     if(MsgClass == IDCMP_GADGETUP)
  645.                     {
  646.                         switch(MsgGadget -> GadgetID)
  647.                         {
  648.                             case GAD_USE:
  649.  
  650.                                 CopyMem(PrivateArray,Array,sizeof(PrivateArray));
  651.  
  652.                                 Array[DETAILPEN]    = PrivateArray[BACKGROUNDPEN];
  653.                                 Array[BLOCKPEN]        = PrivateArray[SHADOWPEN];
  654.                                 Array[BARTRIMPEN]    = PrivateArray[BARDETAILPEN];
  655.  
  656.                                 Result = Done = TRUE;
  657.                                 break;
  658.  
  659.                             case GAD_CANCEL:
  660.  
  661.                                 Done = TRUE;
  662.                                 break;
  663.  
  664.                             case GAD_DEFAULT:
  665.  
  666.                                 for(i = TEXTPEN ; i <= BARBLOCKPEN ; i++)
  667.                                     LT_SetAttributes(Handle,100 + i,GTPA_Color,DefaultArray[i],TAG_DONE);
  668.  
  669.                                 break;
  670.                         }
  671.                     }
  672.                 }
  673.             }
  674.             while(!Done);
  675.  
  676.             PopWindow();
  677.         }
  678.  
  679.         LT_DeleteHandle(Handle);
  680.     }
  681.  
  682.     return(Result);
  683. }
  684.  
  685. BYTE __regargs
  686. ScreenPanel(struct Configuration *LocalConfig,BYTE *Default)
  687. {
  688.     struct LayoutHandle    *Handle;
  689.     BYTE             Cancel = FALSE;
  690.  
  691.     SaveConfig(LocalConfig,PrivateConfig);
  692.  
  693.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  694.         LH_LocaleHook,    &LocaleHook,
  695.         LH_ExactClone,    TRUE,
  696.     TAG_DONE))
  697.     {
  698.         struct Window    *LocalWindow;
  699.         UBYTE         ModeName[DISPLAYNAMELEN + 1],
  700.                  FontName[MAX_FILENAME_LENGTH];
  701.         ULONG         DisplayMode;
  702.         BOOL         WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  703.  
  704.         DisplayMode = LocalConfig -> ScreenConfig -> DisplayMode;
  705.  
  706.         if(ModeNotAvailable(DisplayMode))
  707.         {
  708.             struct Screen *PubScreen = LockPubScreen(NULL);
  709.  
  710.             if(PubScreen)
  711.             {
  712.                 DisplayMode = GetVPModeID(&PubScreen -> ViewPort);
  713.  
  714.                 UnlockPubScreen(NULL,PubScreen);
  715.             }
  716.             else
  717.                 DisplayMode = DEFAULT_MONITOR_ID | HIRES_KEY;
  718.         }
  719.  
  720.         strcpy(ModeName,GetModeName(DisplayMode));
  721.  
  722.         BuildFontName(FontName,LocalConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontHeight);
  723.  
  724.         LT_New(Handle,
  725.             LA_Type,    VERTICAL_KIND,
  726.         TAG_DONE);
  727.         {
  728.             LT_New(Handle,
  729.                 LA_Type,    HORIZONTAL_KIND,
  730.             TAG_DONE);
  731.             {
  732.                 LT_New(Handle,
  733.                     LA_Type,    VERTICAL_KIND,
  734.                 TAG_DONE);
  735.                 {
  736.                     LT_New(Handle,
  737.                         LA_Type,    VERTICAL_KIND,
  738.                         LA_LabelID,    MSG_V36_0163,
  739.                     TAG_DONE);
  740.                     {
  741.                         LT_New(Handle,
  742.                             LA_Type,    TEXT_KIND,
  743.                             LA_LabelID,    MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,
  744.                             LA_Chars,    20,
  745.                             LA_ID,        GAD_SCREENMODE,
  746.                             GTTX_Text,    ModeName,
  747.                             GTTX_Border,    TRUE,
  748.                             LATX_Picker,    TRUE,
  749.                         TAG_DONE);
  750.  
  751.                         LT_New(Handle,
  752.                             LA_Type,    CHECKBOX_KIND,
  753.                             LA_ID,        GAD_USE_PUBSCREEN,
  754.                             LA_LabelID,    MSG_SCREENPANEL_USE_WORKBENCH_GAD,
  755.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> UseWorkbench,
  756.                         TAG_DONE);
  757.  
  758.                         LT_New(Handle,
  759.                             LA_Type,    STRING_KIND,
  760.                             LA_LabelID,    MSG_SCREENPANEL_PUBSCREEN_NAME_GAD,
  761.                             LA_ID,        GAD_PUBSCREENNAME,
  762.                             LA_STRPTR,    LocalConfig -> ScreenConfig -> PubScreenName,
  763.                             GTST_MaxChars,    MAXPUBSCREENNAME,
  764.                             LAST_Picker,    TRUE,
  765.                             GA_Disabled,    !LocalConfig -> ScreenConfig -> UseWorkbench,
  766.                         TAG_DONE);
  767.  
  768.                         LT_New(Handle,
  769.                             LA_Type,    TEXT_KIND,
  770.                             LA_LabelID,    MSG_SCREENPANEL_SCREEN_FONT_GAD,
  771.                             LA_ID,        GAD_FONT,
  772.                             GTTX_Text,    FontName,
  773.                             GTTX_Border,    TRUE,
  774.                             LATX_Picker,    TRUE,
  775.                         TAG_DONE);
  776.  
  777.                         LT_New(Handle,
  778.                             LA_Type,    CHECKBOX_KIND,
  779.                             LA_LabelID,    MSG_SCREENPANEL_FASTER_LAYOUT_GAD,
  780.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> FasterLayout,
  781.                         TAG_DONE);
  782.  
  783.                         LT_New(Handle,
  784.                             LA_Type,    CHECKBOX_KIND,
  785.                             LA_LabelID,    MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,
  786.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> MakeScreenPublic,
  787.                             LA_ID,        GAD_MAKESCREENPUBLIC,
  788.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  789.                         TAG_DONE);
  790.  
  791.                         LT_New(Handle,
  792.                             LA_Type,    CHECKBOX_KIND,
  793.                             LA_ID,        GAD_SHANGHAI,
  794.                             LA_LabelID,    MSG_SCREENPANEL_SHANGHAI_WINDOWS_GAD,
  795.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> ShanghaiWindows,
  796.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  797.                         TAG_DONE);
  798.  
  799.                         LT_EndGroup(Handle);
  800.                     }
  801.  
  802.                     LT_New(Handle,
  803.                         LA_Type,    VERTICAL_KIND,
  804.                         LA_LabelID,    MSG_V36_0164,
  805.                     TAG_DONE);
  806.                     {
  807.                         LT_New(Handle,
  808.                             LA_Type,    VERTICAL_KIND,
  809.                         TAG_DONE);
  810.                         {
  811.                             LT_New(Handle,
  812.                                 LA_Type,    CHECKBOX_KIND,
  813.                                 LA_LabelID,    MSG_SCREENPANEL_SCREEN_TITLE_GAD,
  814.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> TitleBar,
  815.                                 LA_ID,        GAD_SCREENTITLE,
  816.                                 GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  817.                             TAG_DONE);
  818.  
  819.                             LT_New(Handle,
  820.                                 LA_Type,    CHECKBOX_KIND,
  821.                                 LA_LabelID,    MSG_SCREENPANEL_WINDOW_BORDER_TXT,
  822.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> ShareScreen,
  823.                                 LA_ID,        GAD_WINDOW_BORDER,
  824.                                 GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  825.                             TAG_DONE);
  826.  
  827.                             LocalConfig -> ScreenConfig -> StatusLine &= 0xF;
  828.  
  829.                             LT_New(Handle,
  830.                                 LA_Type,    CHECKBOX_KIND,
  831.                                 LA_LabelID,    MSG_SCREENPANEL_SEPARATE_STATUS_WINDOW_TXT,
  832.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> SplitStatus,
  833.                                 LA_ID,        GAD_SPLIT_STATUS,
  834.                                 GA_Disabled,    !LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),
  835.                             TAG_DONE);
  836.  
  837.                             LT_New(Handle,
  838.                                 LA_Type,    CYCLE_KIND,
  839.                                 LA_LabelID,    MSG_SCREENPANEL_STATUS_LINE_GAD,
  840.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> StatusLine,
  841.                                 LACY_FirstLabel,MSG_SCREENPANEL_STATUS_DISABLED_TXT,
  842.                                 LACY_LastLabel,    MSG_SCREENPANEL_STATUS_COMPACT_TXT,
  843.                                 LA_ID,        GAD_STATUS_LINE,
  844.                             TAG_DONE);
  845.  
  846.                             LT_New(Handle,
  847.                                 LA_Type,    CYCLE_KIND,
  848.                                 LA_LabelID,    MSG_SCREENPANEL_ONLINE_TIME_GAD,
  849.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> TimeMode,
  850.                                 LACY_FirstLabel,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,
  851.                                 LACY_LastLabel,    MSG_SCREENPANEL_TIME_BOTH_TXT,
  852.                             TAG_DONE);
  853.  
  854.                             LT_EndGroup(Handle);
  855.                         }
  856.  
  857.                         LT_EndGroup(Handle);
  858.                     }
  859.  
  860.                     LT_EndGroup(Handle);
  861.                 }
  862.  
  863.                 LT_New(Handle,
  864.                     LA_Type,    VERTICAL_KIND,
  865.                 TAG_DONE);
  866.                 {
  867.                     LT_New(Handle,
  868.                         LA_Type,    VERTICAL_KIND,
  869.                         LA_LabelID,    MSG_V36_0165,
  870.                     TAG_DONE);
  871.                     {
  872.                         LT_New(Handle,
  873.                             LA_Type,    CYCLE_KIND,
  874.                             LA_LabelID,    MSG_SCREENPANEL_COLOUR_GAD,
  875.                             LA_WORD,    &LocalConfig -> ScreenConfig -> ColourMode,
  876.                             LA_ID,        GAD_COLOURMODE,
  877.                             LACY_FirstLabel,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,
  878.                             LACY_LastLabel,    MSG_SCREENPANEL_COLOUR_MONO_TXT,
  879.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  880.                         TAG_DONE);
  881.  
  882.                         LT_New(Handle,
  883.                             LA_Type,    CHECKBOX_KIND,
  884.                             LA_LabelID,    MSG_SCREENPANEL_BLINKING_GAD,
  885.                             LA_ID,        GAD_BLINKING,
  886.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> Blinking,
  887.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,
  888.                         TAG_DONE);
  889.  
  890.                         LT_EndGroup(Handle);
  891.                     }
  892.  
  893.                     LT_New(Handle,
  894.                         LA_Type,    VERTICAL_KIND,
  895.                         LA_LabelID,    MSG_V36_0166,
  896.                     TAG_DONE);
  897.                     {
  898.                         LONG Depth;
  899.  
  900.                         switch(LocalConfig -> ScreenConfig -> ColourMode)
  901.                         {
  902.                             case COLOUR_MONO:
  903.  
  904.                                 Depth = 1;
  905.                                 break;
  906.  
  907.                             case COLOUR_AMIGA:
  908.  
  909.                                 Depth = 2;
  910.                                 break;
  911.  
  912.                             case COLOUR_EIGHT:
  913.  
  914.                                 Depth = 3;
  915.                                 break;
  916.  
  917.                             case COLOUR_SIXTEEN:
  918.  
  919.                                 Depth = 4;
  920.                                 break;
  921.                         }
  922.  
  923.                         if(LocalConfig -> ScreenConfig -> UseWorkbench)
  924.                         {
  925.                             LONG i,MaxDepth = 4;
  926.  
  927.                             for(i = 0 ; i < 4 ; i++)
  928.                             {
  929.                                 if((1L << i) > Window -> WScreen -> ViewPort . ColorMap -> Count)
  930.                                 {
  931.                                     MaxDepth = i;
  932.  
  933.                                     break;
  934.                                 }
  935.                             }
  936.  
  937.                             if(Depth > MaxDepth)
  938.                                 Depth = MaxDepth;
  939.                         }
  940.  
  941.                         LT_New(Handle,
  942.                             LA_Type,    VERTICAL_KIND,
  943.                         TAG_DONE);
  944.                         {
  945.                             LT_New(Handle,
  946.                                 LA_Type,    PALETTE_KIND,
  947.                                 LA_LabelID,    MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,
  948.                                 LA_ID,        GAD_PALETTE,
  949.                                 LA_Chars,    16,
  950.                                 GTPA_Depth,    Depth,
  951.                                 GA_Disabled,    WrongMode,
  952.                             TAG_DONE);
  953.  
  954.                             LT_New(Handle,
  955.                                 LA_Type,        SLIDER_KIND,
  956.                                 LA_LabelID,        MSG_SCREENPANEL_RED_GAD,
  957.                                 LA_ID,            GAD_RED,
  958.                                 GTSL_Min,        0,
  959.                                 GTSL_Max,        15,
  960.                                 GTSL_Level,        0,
  961.                                 GTSL_LevelFormat,    "%2ld",
  962.                                 GA_Disabled,        WrongMode,
  963.                             TAG_DONE);
  964.  
  965.                             LT_New(Handle,
  966.                                 LA_Type,        SLIDER_KIND,
  967.                                 LA_LabelID,        MSG_SCREENPANEL_GREEN_GAD,
  968.                                 LA_ID,            GAD_GREEN,
  969.                                 GTSL_Min,        0,
  970.                                 GTSL_Max,        15,
  971.                                 GTSL_Level,        0,
  972.                                 GTSL_LevelFormat,    "%2ld",
  973.                                 GA_Disabled,        WrongMode,
  974.                             TAG_DONE);
  975.  
  976.                             LT_New(Handle,
  977.                                 LA_Type,        SLIDER_KIND,
  978.                                 LA_LabelID,        MSG_SCREENPANEL_BLUE_GAD,
  979.                                 LA_ID,            GAD_BLUE,
  980.                                 GTSL_Min,        0,
  981.                                 GTSL_Max,        15,
  982.                                 GTSL_Level,        0,
  983.                                 GTSL_LevelFormat,    "%2ld",
  984.                                 GA_Disabled,        WrongMode,
  985.                             TAG_DONE);
  986.  
  987.                             LT_New(Handle,
  988.                                 LA_Type,        XBAR_KIND,
  989.                             TAG_DONE);
  990.  
  991.                             LT_EndGroup(Handle);
  992.                         }
  993.  
  994.                         LT_New(Handle,
  995.                             LA_Type,    VERTICAL_KIND,
  996.                         TAG_DONE);
  997.                         {
  998.                             LT_New(Handle,
  999.                                 LA_Type,    BUTTON_KIND,
  1000.                                 LA_LabelID,    MSG_SCREENPANEL_USE_DEFAULT_TXT,
  1001.                                 LA_ID,        GAD_RESET,
  1002.                                 LA_Chars,    16,
  1003.                                 GA_Disabled,    WrongMode,
  1004.                             TAG_DONE);
  1005.  
  1006.                             LT_EndGroup(Handle);
  1007.                         }
  1008.  
  1009.                         LT_EndGroup(Handle);
  1010.                     }
  1011.  
  1012.                     if(Kick30)
  1013.                     {
  1014.                         LT_New(Handle,
  1015.                             LA_Type,    VERTICAL_KIND,
  1016.                             LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  1017.                         TAG_DONE);
  1018.                         {
  1019.                             LT_New(Handle,
  1020.                                 LA_Type,    VERTICAL_KIND,
  1021.                             TAG_DONE);
  1022.                             {
  1023.                                 LT_New(Handle,
  1024.                                     LA_Type,    CHECKBOX_KIND,
  1025.                                     LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  1026.                                     LA_ID,        GAD_STDPENS,
  1027.                                     LA_BYTE,    &LocalConfig -> ScreenConfig -> UsePens,
  1028.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1029.                                 TAG_DONE);
  1030.  
  1031.                                 LT_EndGroup(Handle);
  1032.                             }
  1033.  
  1034.                             LT_New(Handle,
  1035.                                 LA_Type,    VERTICAL_KIND,
  1036.                             TAG_DONE);
  1037.                             {
  1038.                                 LT_New(Handle,
  1039.                                     LA_Type,    BUTTON_KIND,
  1040.                                     LA_LabelID,    MSG_PENPANEL_EDITPENS_TXT,
  1041.                                     LA_ID,        GAD_EDITPENS,
  1042.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1043.                                 TAG_DONE);
  1044.  
  1045.                                 LT_EndGroup(Handle);
  1046.                             }
  1047.  
  1048.                             LT_EndGroup(Handle);
  1049.                         }
  1050.                     }
  1051.  
  1052.                     LT_EndGroup(Handle);
  1053.                 }
  1054.  
  1055.                 LT_EndGroup(Handle);
  1056.             }
  1057.  
  1058.             LT_New(Handle,
  1059.                 LA_Type,    VERTICAL_KIND,
  1060.             TAG_DONE);
  1061.             {
  1062.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  1063.  
  1064.                 LT_EndGroup(Handle);
  1065.             }
  1066.  
  1067.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  1068.                 LAGR_SameSize,    TRUE,
  1069.                 LAGR_Spread,    TRUE,
  1070.             TAG_DONE);
  1071.             {
  1072.                 LT_New(Handle,
  1073.                     LA_Type,    BUTTON_KIND,
  1074.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  1075.                     LA_ID,        GAD_USE,
  1076.                     LABT_ReturnKey,    TRUE,
  1077.                     LABT_ExtraFat,    TRUE,
  1078.                 TAG_DONE);
  1079.  
  1080.                 if(Default)
  1081.                 {
  1082.                     LT_New(Handle,
  1083.                         LA_Type,    BUTTON_KIND,
  1084.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  1085.                         LA_ID,        GAD_DEFAULT,
  1086.                         LABT_ExtraFat,    TRUE,
  1087.                     TAG_DONE);
  1088.                 }
  1089.  
  1090.                 LT_New(Handle,
  1091.                     LA_Type,    BUTTON_KIND,
  1092.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  1093.                     LA_ID,        GAD_CANCEL,
  1094.                     LABT_EscKey,    TRUE,
  1095.                     LABT_ExtraFat,    TRUE,
  1096.                 TAG_DONE);
  1097.  
  1098.                 LT_EndGroup(Handle);
  1099.             }
  1100.  
  1101.             LT_EndGroup(Handle);
  1102.         }
  1103.  
  1104.         if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  1105.             LAWN_HelpHook,        &GuideHook,
  1106.             WA_DepthGadget,        TRUE,
  1107.             WA_CloseGadget,        TRUE,
  1108.             WA_DragBar,        TRUE,
  1109.             WA_RMBTrap,        TRUE,
  1110.             WA_Activate,        TRUE,
  1111.         TAG_DONE))
  1112.         {
  1113.             struct IntuiMessage    *Message;
  1114.             BOOLEAN             Done = FALSE;
  1115.             ULONG             MsgClass,
  1116.                          MsgQualifier;
  1117.             UWORD             MsgCode;
  1118.             struct Gadget        *MsgGadget;
  1119.  
  1120.             WORD             ColourNumber = 0,Count,i;
  1121.             BYTE             Red,Green,Blue;
  1122.             struct ViewPort        *LocalVPort = &LocalWindow -> WScreen -> ViewPort;
  1123.  
  1124.             UWORD            *DefaultPens,Depth;
  1125.  
  1126.             switch(LocalConfig -> ScreenConfig -> ColourMode)
  1127.             {
  1128.                 case COLOUR_MONO:
  1129.  
  1130.                     DefaultPens = MonoPens;
  1131.                     Depth = 1;
  1132.                     break;
  1133.  
  1134.                 case COLOUR_AMIGA:
  1135.  
  1136.                     DefaultPens = StandardPens;
  1137.                     Depth = 2;
  1138.                     break;
  1139.  
  1140.                 case COLOUR_EIGHT:
  1141.  
  1142.                     DefaultPens = ANSIPens;
  1143.                     Depth = 3;
  1144.                     break;
  1145.  
  1146.                 case COLOUR_SIXTEEN:
  1147.  
  1148.                     DefaultPens = EGAPens;
  1149.                     Depth = 4;
  1150.                     break;
  1151.             }
  1152.  
  1153.             for(Count = 0, i = DETAILPEN ; i <= BARTRIMPEN ; i++)
  1154.             {
  1155.                 if(LocalConfig -> ScreenConfig -> PenArray[i])
  1156.                     Count++;
  1157.             }
  1158.  
  1159.             if(!Count)
  1160.                 CopyMem(DefaultPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1161.  
  1162.             LocalConfig -> ScreenConfig -> DisplayMode = DisplayMode;
  1163.  
  1164.             if(!WrongMode)
  1165.             {
  1166.                 Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1167.                 Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1168.                 Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1169.  
  1170.                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1171.                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1172.                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1173.  
  1174.                 if(Screen)
  1175.                 {
  1176.                     LoadRGB4(VPort,NormalColours,PaletteSize);
  1177.                     LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1178.                 }
  1179.             }
  1180.  
  1181.             GuideContext(CONTEXT_SCREEN);
  1182.  
  1183.             PushWindow(LocalWindow);
  1184.  
  1185.             LT_ShowWindow(Handle,TRUE);
  1186.  
  1187.             do
  1188.             {
  1189.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  1190.                 {
  1191.                     SaveConfig(PrivateConfig,LocalConfig);
  1192.  
  1193.                     if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1194.                     {
  1195.                         if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1196.                             PaletteSetup(LocalConfig);
  1197.                         else
  1198.                             PaletteSetup(Config);
  1199.  
  1200.                         LoadRGB4(VPort,NormalColours,PaletteSize);
  1201.                         LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1202.                     }
  1203.  
  1204.                     break;
  1205.                 }
  1206.  
  1207.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(LocalWindow -> UserPort))
  1208.                 {
  1209.                     MsgClass    = Message -> Class;
  1210.                     MsgQualifier    = Message -> Qualifier;
  1211.                     MsgCode        = Message -> Code;
  1212.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  1213.  
  1214.                     GT_ReplyIMsg(Message);
  1215.  
  1216.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  1217.  
  1218.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  1219.                     {
  1220.                         SaveConfig(PrivateConfig,LocalConfig);
  1221.  
  1222.                         if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1223.                         {
  1224.                             if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1225.                                 PaletteSetup(LocalConfig);
  1226.                             else
  1227.                                 PaletteSetup(Config);
  1228.  
  1229.                             LoadRGB4(VPort,NormalColours,PaletteSize);
  1230.                             LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1231.                         }
  1232.  
  1233.                         Done = TRUE;
  1234.                     }
  1235.  
  1236.                     if(MsgClass == IDCMP_MOUSEMOVE)
  1237.                     {
  1238.                         switch(MsgGadget -> GadgetID)
  1239.                         {
  1240.                             case GAD_RED:
  1241.  
  1242.                                 Red = MsgCode;
  1243.  
  1244.                                 LocalConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  1245.  
  1246.                                 PaletteSetup(LocalConfig);
  1247.  
  1248.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1249.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1250.  
  1251.                                 break;
  1252.  
  1253.                             case GAD_GREEN:
  1254.  
  1255.                                 Green = MsgCode;
  1256.  
  1257.                                 LocalConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  1258.  
  1259.                                 PaletteSetup(LocalConfig);
  1260.  
  1261.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1262.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1263.  
  1264.                                 break;
  1265.  
  1266.                             case GAD_BLUE:
  1267.  
  1268.                                 Blue = MsgCode;
  1269.  
  1270.                                 LocalConfig -> ScreenConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  1271.  
  1272.                                 PaletteSetup(LocalConfig);
  1273.  
  1274.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1275.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1276.  
  1277.                                 break;
  1278.                         }
  1279.                     }
  1280.  
  1281.                     if(MsgClass == IDCMP_GADGETUP)
  1282.                     {
  1283.                         switch(MsgGadget -> GadgetID)
  1284.                         {
  1285.                             case GAD_STDPENS:
  1286.  
  1287.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1288.                                     GA_Disabled,LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1289.                                 TAG_DONE);
  1290.  
  1291.                                 break;
  1292.  
  1293.                             case GAD_USE_PUBSCREEN:
  1294.  
  1295.                                 LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GA_Disabled,!LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1296.                                 LT_SetAttributes(Handle,GAD_MAKESCREENPUBLIC,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1297.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1298.                                 LT_SetAttributes(Handle,GAD_SCREENTITLE,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1299.                                 LT_SetAttributes(Handle,GAD_WINDOW_BORDER,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1300.                                 LT_SetAttributes(Handle,GAD_BLINKING,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1301.                                 LT_SetAttributes(Handle,GAD_COLOURMODE,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1302.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1303.  
  1304.                                 WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  1305.  
  1306.                                 LT_SetAttributes(Handle,GAD_PALETTE,GA_Disabled,WrongMode,TAG_DONE);
  1307.                                 LT_SetAttributes(Handle,GAD_RED,GA_Disabled,WrongMode,TAG_DONE);
  1308.                                 LT_SetAttributes(Handle,GAD_GREEN,GA_Disabled,WrongMode,TAG_DONE);
  1309.                                 LT_SetAttributes(Handle,GAD_BLUE,GA_Disabled,WrongMode,TAG_DONE);
  1310.                                 LT_SetAttributes(Handle,GAD_RESET,GA_Disabled,WrongMode,TAG_DONE);
  1311.  
  1312.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1313.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1314.                                 TAG_DONE);
  1315.  
  1316.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1317.                                     GTCB_Checked,    LocalConfig -> ScreenConfig -> UsePens = TRUE,
  1318.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1319.                                 TAG_DONE);
  1320.  
  1321.                                 break;
  1322.  
  1323.                             case GAD_WINDOW_BORDER:
  1324.  
  1325.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1326.                                 break;
  1327.  
  1328.                             case GAD_COLOURMODE:
  1329.  
  1330.                                 if(!ModeOkay(LocalConfig -> ScreenConfig -> DisplayMode) && LocalConfig -> ScreenConfig -> ColourMode > COLOUR_AMIGA)
  1331.                                     LT_SetAttributes(Handle,GAD_COLOURMODE,GTCY_Active,COLOUR_AMIGA,TAG_DONE);
  1332.  
  1333.                                 WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  1334.  
  1335.                                 LT_SetAttributes(Handle,GAD_PALETTE,GA_Disabled,WrongMode,TAG_DONE);
  1336.                                 LT_SetAttributes(Handle,GAD_RED,GA_Disabled,WrongMode,TAG_DONE);
  1337.                                 LT_SetAttributes(Handle,GAD_GREEN,GA_Disabled,WrongMode,TAG_DONE);
  1338.                                 LT_SetAttributes(Handle,GAD_BLUE,GA_Disabled,WrongMode,TAG_DONE);
  1339.                                 LT_SetAttributes(Handle,GAD_RESET,GA_Disabled,WrongMode,TAG_DONE);
  1340.  
  1341.                                 LT_SetAttributes(Handle,GAD_BLINKING,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1342.  
  1343.                                 switch(LocalConfig -> ScreenConfig -> ColourMode)
  1344.                                 {
  1345.                                     case COLOUR_MONO:
  1346.  
  1347.                                         DefaultPens = MonoPens;
  1348.                                         Depth = 1;
  1349.                                         break;
  1350.  
  1351.                                     case COLOUR_AMIGA:
  1352.  
  1353.                                         DefaultPens = StandardPens;
  1354.                                         Depth = 2;
  1355.                                         break;
  1356.  
  1357.                                     case COLOUR_EIGHT:
  1358.  
  1359.                                         DefaultPens = ANSIPens;
  1360.                                         Depth = 3;
  1361.                                         break;
  1362.  
  1363.                                     case COLOUR_SIXTEEN:
  1364.  
  1365.                                         DefaultPens = EGAPens;
  1366.                                         Depth = 4;
  1367.                                         break;
  1368.                                 }
  1369.  
  1370.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1371.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1372.                                 TAG_DONE);
  1373.  
  1374.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1375.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1376.                                 TAG_DONE);
  1377.  
  1378.                                 break;
  1379.  
  1380.                             case GAD_EDITPENS:
  1381.  
  1382.                                 LT_LockWindow(LocalWindow);
  1383.  
  1384.                                 if(LocalConfig -> ScreenConfig -> PenColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1385.                                 {
  1386.                                     UWORD LocalPens[16];
  1387.  
  1388.                                     CopyMem(DefaultPens,LocalPens,16 * sizeof(UWORD));
  1389.  
  1390.                                     if(PenPanel(LocalWindow,LocalPens,DefaultPens,Depth))
  1391.                                     {
  1392.                                         CopyMem(LocalPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1393.  
  1394.                                         LocalConfig -> ScreenConfig -> PenColourMode = LocalConfig -> ScreenConfig -> ColourMode;
  1395.                                     }
  1396.                                 }
  1397.                                 else
  1398.                                     PenPanel(LocalWindow,LocalConfig -> ScreenConfig -> PenArray,DefaultPens,Depth);
  1399.  
  1400.                                 LT_UnlockWindow(LocalWindow);
  1401.  
  1402.                                 LT_ShowWindow(Handle,TRUE);
  1403.                                 break;
  1404.  
  1405.                             case GAD_MAKESCREENPUBLIC:
  1406.  
  1407.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,
  1408.                                     GA_Disabled,    !LocalConfig -> ScreenConfig -> MakeScreenPublic || LocalConfig -> ScreenConfig -> UseWorkbench,
  1409.                                 TAG_DONE);
  1410.  
  1411.                                 break;
  1412.  
  1413.                             case GAD_PALETTE:
  1414.  
  1415.                                 ColourNumber = MsgCode;
  1416.  
  1417.                                 Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1418.                                 Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1419.                                 Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1420.  
  1421.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1422.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1423.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1424.  
  1425.                                 break;
  1426.  
  1427.                             case GAD_RESET:
  1428.  
  1429.                                 switch(LocalConfig -> ScreenConfig -> ColourMode)
  1430.                                 {
  1431.                                     case COLOUR_AMIGA:
  1432.  
  1433.                                         CopyMem(DefaultColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1434.                                         break;
  1435.  
  1436.                                     case COLOUR_EIGHT:
  1437.  
  1438.                                         CopyMem(ANSIColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1439.                                         break;
  1440.  
  1441.                                     case COLOUR_SIXTEEN:
  1442.  
  1443.                                         CopyMem(EGAColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1444.                                         break;
  1445.  
  1446.                                     case COLOUR_MONO:
  1447.  
  1448.                                         CopyMem(AtomicColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1449.                                         break;
  1450.                                 }
  1451.  
  1452.                                 Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1453.                                 Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1454.                                 Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1455.  
  1456.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1457.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1458.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1459.  
  1460.                                 PaletteSetup(LocalConfig);
  1461.                                 LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1462.                                 LoadRGB4(VPort,NormalColours,PaletteSize);
  1463.  
  1464.                                 break;
  1465.  
  1466.                             case GAD_USE:
  1467.  
  1468.                                 if(!WrongMode)
  1469.                                     PaletteSetup(LocalConfig);
  1470.                                 else
  1471.                                 {
  1472.                                     if(LocalConfig -> ScreenConfig -> ColourMode != PrivateConfig -> ScreenConfig -> ColourMode)
  1473.                                     {
  1474.                                         switch(LocalConfig -> ScreenConfig -> ColourMode)
  1475.                                         {
  1476.                                             case COLOUR_EIGHT:
  1477.  
  1478.                                                 CopyMem(ANSIColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1479.                                                 break;
  1480.  
  1481.                                             case COLOUR_SIXTEEN:
  1482.  
  1483.                                                 CopyMem(EGAColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1484.                                                 break;
  1485.  
  1486.                                             case COLOUR_AMIGA:
  1487.  
  1488.                                                 CopyMem(DefaultColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1489.                                                 break;
  1490.  
  1491.                                             case COLOUR_MONO:
  1492.  
  1493.                                                 CopyMem(AtomicColours,LocalConfig -> ScreenConfig -> Colours,16 * sizeof(UWORD));
  1494.                                                 break;
  1495.                                         }
  1496.                                     }
  1497.                                 }
  1498.  
  1499.                                 if(LocalConfig -> ScreenConfig -> PenColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1500.                                 {
  1501.                                     CopyMem(DefaultPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1502.  
  1503.                                     LocalConfig -> ScreenConfig -> PenColourMode = LocalConfig -> ScreenConfig -> ColourMode;
  1504.                                 }
  1505.  
  1506.                                 Done = TRUE;
  1507.                                 break;
  1508.  
  1509.                             case GAD_CANCEL:
  1510.  
  1511.                                 SaveConfig(PrivateConfig,LocalConfig);
  1512.  
  1513.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1514.                                 {
  1515.                                     if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1516.                                         PaletteSetup(LocalConfig);
  1517.                                     else
  1518.                                         PaletteSetup(Config);
  1519.  
  1520.                                     LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1521.                                     LoadRGB4(VPort,NormalColours,PaletteSize);
  1522.                                 }
  1523.  
  1524.                                 Cancel = Done = TRUE;
  1525.                                 break;
  1526.  
  1527.                             case GAD_DEFAULT:
  1528.  
  1529.                                 *Default = TRUE;
  1530.  
  1531.                                 SaveConfig(PrivateConfig,LocalConfig);
  1532.  
  1533.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1534.                                 {
  1535.                                     if(!memcmp(Config -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours,sizeof(UWORD) * 16))
  1536.                                         PaletteSetup(LocalConfig);
  1537.                                     else
  1538.                                         PaletteSetup(Config);
  1539.  
  1540.                                     LoadRGB4(LocalVPort,NormalColours,PaletteSize);
  1541.                                     LoadRGB4(VPort,NormalColours,PaletteSize);
  1542.                                 }
  1543.  
  1544.                                 Done = TRUE;
  1545.                                 break;
  1546.                         }
  1547.                     }
  1548.  
  1549.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  1550.                     {
  1551.                         switch(MsgGadget -> GadgetID)
  1552.                         {
  1553.                             case GAD_FONT:
  1554.  
  1555.                                 LT_LockWindow(LocalWindow);
  1556.  
  1557. /*                                if(PickFont(LocalWindow,LocalConfig -> ScreenConfig -> FontName,&LocalConfig -> ScreenConfig -> FontHeight,!Kick30))*/
  1558.  
  1559.                                 if(PickFont(LocalWindow,LocalConfig -> ScreenConfig -> FontName,&LocalConfig -> ScreenConfig -> FontHeight,FALSE))
  1560.                                 {
  1561.                                     BuildFontName(FontName,LocalConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontHeight);
  1562.  
  1563.                                     LT_SetAttributes(Handle,GAD_FONT,
  1564.                                         GTTX_Text,    FontName,
  1565.                                     TAG_DONE);
  1566.                                 }
  1567.  
  1568.                                 LT_UnlockWindow(LocalWindow);
  1569.  
  1570.                                 break;
  1571.  
  1572.                             case GAD_SCREENMODE:
  1573.  
  1574.                                 LT_LockWindow(LocalWindow);
  1575.  
  1576.                                 if(SelectDisplayMode(LocalWindow,&LocalConfig -> ScreenConfig -> DisplayMode,LocalConfig))
  1577.                                 {
  1578.                                     strcpy(ModeName,GetModeName(LocalConfig -> ScreenConfig -> DisplayMode));
  1579.  
  1580.                                     LT_SetAttributes(Handle,GAD_SCREENMODE,GTTX_Text,ModeName,TAG_DONE);
  1581.                                 }
  1582.  
  1583.                                 LT_UnlockWindow(LocalWindow);
  1584.  
  1585.                                 LT_ShowWindow(Handle,TRUE);
  1586.  
  1587.                                 break;
  1588.  
  1589.                             case GAD_STATUS_LINE:
  1590.  
  1591.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1592.  
  1593.                                 break;
  1594.  
  1595.                             case GAD_PUBSCREENNAME:
  1596.  
  1597.                                 if(LocalConfig -> ScreenConfig -> UseWorkbench)
  1598.                                 {
  1599.                                     UBYTE DummyBuffer[MAXPUBSCREENNAME + 1];
  1600.  
  1601.                                     LT_LockWindow(LocalWindow);
  1602.  
  1603.                                     strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_PUBSCREENNAME,TAG_DONE));
  1604.                                     strcpy(SharedBuffer,DummyBuffer);
  1605.  
  1606.                                     if(PickScreen(Window,DummyBuffer))
  1607.                                     {
  1608.                                         if(strcmp(DummyBuffer,SharedBuffer))
  1609.                                             LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GTST_String,DummyBuffer,TAG_DONE);
  1610.                                     }
  1611.  
  1612.                                     LT_UnlockWindow(LocalWindow);
  1613.  
  1614.                                     LT_ShowWindow(Handle,TRUE);
  1615.                                 }
  1616.  
  1617.                                 break;
  1618.                         }
  1619.                     }
  1620.                 }
  1621.             }
  1622.             while(!Done);
  1623.  
  1624.             PopWindow();
  1625.         }
  1626.  
  1627.         LT_DeleteHandle(Handle);
  1628.     }
  1629.  
  1630.     if(Default)
  1631.         return((BYTE)(!Cancel));
  1632.     else
  1633.     {
  1634.         if(PrivateConfig -> ScreenConfig -> DisplayMode != LocalConfig -> ScreenConfig -> DisplayMode || Stricmp(PrivateConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontName) || PrivateConfig -> ScreenConfig -> FontHeight != LocalConfig -> ScreenConfig -> FontHeight || PrivateConfig -> ScreenConfig -> ColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1635.             return(TRUE);
  1636.  
  1637.         if(PrivateConfig -> ScreenConfig -> MakeScreenPublic != LocalConfig -> ScreenConfig -> MakeScreenPublic || PrivateConfig -> ScreenConfig -> ShanghaiWindows != LocalConfig -> ScreenConfig -> ShanghaiWindows)
  1638.             return(TRUE);
  1639.  
  1640.         if(PrivateConfig -> ScreenConfig -> Blinking != LocalConfig -> ScreenConfig -> Blinking && (LocalConfig -> ScreenConfig -> ColourMode == COLOUR_EIGHT || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_SIXTEEN))
  1641.             return(TRUE);
  1642.  
  1643.         if(PrivateConfig -> ScreenConfig -> FasterLayout != LocalConfig -> ScreenConfig -> FasterLayout && LocalConfig -> ScreenConfig -> ColourMode != COLOUR_MONO)
  1644.             return(TRUE);
  1645.  
  1646.         if(PrivateConfig -> ScreenConfig -> TitleBar != LocalConfig -> ScreenConfig -> TitleBar || PrivateConfig -> ScreenConfig -> StatusLine != LocalConfig -> ScreenConfig -> StatusLine || PrivateConfig -> ScreenConfig -> UseWorkbench != LocalConfig -> ScreenConfig -> UseWorkbench || PrivateConfig -> ScreenConfig -> Depth != LocalConfig -> ScreenConfig -> Depth || PrivateConfig -> ScreenConfig -> OverscanType != LocalConfig -> ScreenConfig -> OverscanType || PrivateConfig -> ScreenConfig -> DisplayWidth != LocalConfig -> ScreenConfig -> DisplayWidth || PrivateConfig -> ScreenConfig -> DisplayHeight != LocalConfig -> ScreenConfig -> DisplayHeight)
  1647.             return(TRUE);
  1648.  
  1649.         if(PrivateConfig -> ScreenConfig -> ShareScreen != LocalConfig -> ScreenConfig -> ShareScreen || PrivateConfig -> ScreenConfig -> SplitStatus != LocalConfig -> ScreenConfig -> SplitStatus)
  1650.             return(TRUE);
  1651.  
  1652.         if(strcmp(PrivateConfig -> ScreenConfig -> PubScreenName,LocalConfig -> ScreenConfig -> PubScreenName) && LocalConfig -> ScreenConfig -> UseWorkbench)
  1653.             return(TRUE);
  1654.  
  1655.         if(LocalConfig -> ScreenConfig -> UsePens != PrivateConfig -> ScreenConfig -> UsePens || memcmp(LocalConfig -> ScreenConfig -> PenArray,PrivateConfig -> ScreenConfig -> PenArray,sizeof(UWORD) * 12))
  1656.             return(TRUE);
  1657.  
  1658.         return(FALSE);
  1659.     }
  1660. }
  1661.